package com.supermarket.service;

import com.supermarket.entity.Rider;
import com.supermarket.mapper.RiderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 骑手信息Service实现类
 */
@Service
public class RiderService {

    @Autowired
    private RiderMapper riderMapper;

    /**
     * 创建骑手信息
     * @param rider 骑手信息
     * @return 是否成功
     */
    public boolean createRider(Rider rider) {
        rider.setStatus("AVAILABLE"); // 默认可接单状态
        rider.setDeliveryCount(0); // 初始配送单数为0
        rider.setRating(new BigDecimal("5.0")); // 初始评分5.0
        rider.setCreateTime(new Date());
        rider.setUpdateTime(new Date());
        return riderMapper.insertRider(rider) > 0;
    }
    
    /**
     * 根据ID查询骑手信息
     * @param id 骑手ID
     * @return 骑手信息
     */
    public Rider getRiderById(Integer id) {
        return riderMapper.selectRiderById(id);
    }
    
    /**
     * 根据用户ID查询骑手信息
     * @param userId 用户ID
     * @return 骑手信息
     */
    public Rider getRiderByUserId(Integer userId) {
        return riderMapper.selectRiderByUserId(userId);
    }
    
    /**
     * 根据状态查询骑手列表
     * @param status 骑手状态
     * @return 骑手列表
     */
    public List<Rider> getRidersByStatus(String status) {
        return riderMapper.selectRidersByStatus(status);
    }
    
    /**
     * 更新骑手状态
     * @param id 骑手ID
     * @param status 骑手状态（AVAILABLE-可接单，BUSY-配送中，OFFLINE-休息中）
     * @return 是否成功
     */
    public boolean updateRiderStatus(Integer id, String status) {
        if (!isValidStatus(status)) {
            return false;
        }
        return riderMapper.updateRiderStatus(id, status) > 0;
    }
    
    /**
     * 验证骑手状态是否有效
     * @param status 骑手状态
     * @return 是否有效
     */
    private boolean isValidStatus(String status) {
        return "AVAILABLE".equals(status) || "BUSY".equals(status) || "OFFLINE".equals(status);
    }
    
    /**
     * 增加骑手配送单数
     * @param id 骑手ID
     * @return 是否成功
     */
    public boolean incrementDeliveryCount(Integer id) {
        return riderMapper.incrementDeliveryCount(id) > 0;
    }
    
    /**
     * 更新骑手评分
     * @param id 骑手ID
     * @param rating 新评分
     * @return 是否成功
     */
    public boolean updateRiderRating(Integer id, BigDecimal rating) {
        // 验证评分范围（1.0-5.0）
        if (rating.compareTo(new BigDecimal("1.0")) < 0 || rating.compareTo(new BigDecimal("5.0")) > 0) {
            return false;
        }
        return riderMapper.updateRiderRating(id, rating) > 0;
    }
    
    /**
     * 查询所有骑手
     * @return 骑手列表
     */
    public List<Rider> getAllRiders() {
        return riderMapper.selectAllRiders();
    }
    
    /**
     * 查询评分大于等于指定值的骑手
     * @param rating 评分值
     * @return 骑手列表
     */
    public List<Rider> getRidersByRatingGreaterThan(BigDecimal rating) {
        return riderMapper.selectRidersByRatingGreaterThan(rating);
    }
    
    /**
     * 分页查询骑手列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 骑手列表
     */
    public List<Rider> getRidersWithPagination(int pageNum, int pageSize) {
        int offset = (pageNum - 1) * pageSize;
        return riderMapper.selectRidersWithPagination(offset, pageSize);
    }
    
    /**
     * 查询骑手总数
     * @return 骑手总数
     */
    public int countRiders() {
        return riderMapper.countRiders();
    }
    
    /**
     * 查询骑手信息（包含用户信息）
     * @param id 骑手ID
     * @return 骑手信息（包含用户信息）
     */
    public Rider getRiderWithUserById(Integer id) {
        return riderMapper.selectRiderWithUserById(id);
    }
    
    /**
     * 更新骑手信息
     * @param rider 骑手信息
     * @return 是否成功
     */
    public boolean updateRider(Rider rider) {
        rider.setUpdateTime(new Date());
        return riderMapper.updateRider(rider) > 0;
    }
} 